/*
 * GenerarEscenariosUtil.java
 *
 * Created on 31 de mayo de 2007, 08:38 AM
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package ig.metrica.escenario;

import com.ig.presentacion.modelos.desembolso.calculos.Conversiones;
import com.ig.presentacion.modelos.desembolso.calculos.PlanesAmortizacion;
import com.ig.presentacion.modelos.desembolso.calculos.interfaces.ICalendarios;
import com.ig.presentacion.modelos.desembolso.calculos.interfaces.IFrecuencias;
import com.ig.presentacion.modelos.desembolso.calculos.interfaces.IModalidad;
import ig.metrica.ModelosDTO;
import ig.metrica.ejb.bean.Contratos;
import ig.metrica.ejb.bean.Flujos;
import ig.metrica.ejb.bean.Tasasdepagos;
import ig.metrica.ejb.conflujos.ConfiguracionFlujosSessionBean;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import java.util.StringTokenizer;

/**
 *
 * @author jsanchez
 */
public class GenerarEscenariosUtil {
    
    /** Creates a new instance of GenerarEscenariosUtil */
    public GenerarEscenariosUtil() {
    }
    
    
    public static ig.metrica.ejb.conflujos.ConfiguracionFlujosSessionBean lookupConfiguracionFlujosSessionBean() {
        return new ConfiguracionFlujosSessionBean();
        /*try {
            javax.naming.Context c = new javax.naming.InitialContext();
            ig.metrica.ejb.conflujos.ConfiguracionFlujosSessionLocalHome rv = (ig.metrica.ejb.conflujos.ConfiguracionFlujosSessionLocalHome) c.lookup("java:comp/env/ejb/ConfiguracionFlujosSessionBean");
            return rv.create();
        } catch(javax.naming.NamingException ne) {
            throw new RuntimeException(ne);
        } catch(javax.ejb.CreateException ce) {
            throw new RuntimeException(ce);
        }*/
    }

    /**     
     * ${FECHA_CORTE}
     * @{FECHA_CORTE_DIA}
     * @{FECHA_CORTE_MES}
     * @{FECHA_CORTE_ANIO}
     * 
     * @param QUERY
     * @param b
     * @return
     */
    public static String getQUERY(String QUERY,boolean b) {
        String sinPeso="";
        String sinArroba="";
        String _QUERY="";
        StringTokenizer tokenPeso= new StringTokenizer(QUERY,"$");
        if(tokenPeso.hasMoreTokens()){
            sinPeso=tokenPeso.nextToken().toString();
        }
        
        if(QUERY.contains("$")){
            while(tokenPeso.hasMoreTokens()){
                sinPeso=sinPeso+"_";
                String TEMP=tokenPeso.nextToken().toString();
                for (int i = 0; i < TEMP.getBytes().length; i++) {
                    if(!TEMP.substring(i,i+1).equals("{"))
                        if(!TEMP.substring(i,i+1).equals("}")){
                        sinPeso=sinPeso+TEMP.substring(i,i+1);
                        }else{
                        sinPeso=sinPeso+TEMP.substring(i+1,TEMP.getBytes().length);
                        break;
                        }
                }
            }
            QUERY=sinPeso;
        }
//        System.out.println(QUERY);
        StringTokenizer tokenArroba= new StringTokenizer(QUERY,"@");
        if(tokenArroba.hasMoreTokens()){
            sinArroba=tokenArroba.nextToken().toString();
        }
        if(QUERY.contains("@")){
            while(tokenArroba.hasMoreTokens()){
                sinArroba=sinArroba+"-";
                String TEMP=tokenArroba.nextToken().toString();
                for (int i = 0; i < TEMP.getBytes().length; i++) {
                    if(!TEMP.substring(i,i+1).equals("{"))
                        if(!TEMP.substring(i,i+1).equals("}")){
                        sinArroba=sinArroba+TEMP.substring(i,i+1);
                        }else{
                        sinArroba=sinArroba+TEMP.substring(i+1,TEMP.getBytes().length);
                        break;
                        }
                }
            }
            _QUERY=sinArroba;
        }else
            _QUERY=QUERY;
        if(b)
            return _QUERY.replaceAll("_FECHA_INICIAL","?").replaceAll("_FECHA_CORTE","?");
        else
            return _QUERY;
    }
    
    public static Timestamp getFecha(String fecha){
        fecha=fecha.trim();
        String FECHA[]= new String[3];
        StringTokenizer fechaToken= new StringTokenizer(fecha,"-") ;
        FECHA[0]=(String) fechaToken.nextElement();
        FECHA[1]=(String) fechaToken.nextElement();
        FECHA[2]=(String) fechaToken.nextElement();
        return (new Timestamp(new Date(FECHA[2]+"/"+FECHA[1]+"/"+FECHA[0]).getTime()));
    }
    
    public static void _limpiarMemoria(Integer espera){
        try {
            Runtime.getRuntime().gc();
        } catch (Exception e) {}
        try {
            Thread.sleep(espera);
        } catch (Exception e) {}
    }
    
    public static Integer getFrecuencia(String nodalidad){
        String NODALIDAD=nodalidad.trim().toUpperCase();
        if(NODALIDAD.equals("TA")){
            return IFrecuencias.TRIMESTRAL;
        }else if(NODALIDAD.equals("TV")){
            return IFrecuencias.TRIMESTRAL;
        }else if(NODALIDAD.equals("SA")){
            return IFrecuencias.SEMESTRAL;
        }else if(NODALIDAD.equals("SV")){
            return IFrecuencias.SEMESTRAL;
        }else if(NODALIDAD.equals("MA")){
            return IFrecuencias.MENSUAL;
        }else if(NODALIDAD.equals("MV")){
            return IFrecuencias.MENSUAL;
        }else if(NODALIDAD.equals("AA")){
            return IFrecuencias.ANUAL;
        }else if(NODALIDAD.equals("AV")){
            return IFrecuencias.ANUAL;
        }else if(NODALIDAD.equals("PA")){
            return IFrecuencias.IRREGULARES;
        }else if(NODALIDAD.equals("PV")){
            return IFrecuencias.IRREGULARES;
        }
        return null;
    }
    
    public static String getFecha(Date fecha, ModelosDTO mmodelo) {
        int DIA=Calendar.DAY_OF_MONTH;
        int MES=Calendar.MONTH;
        int ANNO=Calendar.YEAR;
        int numDias=-1;
        //Calendar MyFecha=Calendar.getInstance();
        Calendar fechaDB= Calendar.getInstance();
        Calendar fechaDigitada= Calendar.getInstance();
        fechaDigitada.setTime((Date) fecha.clone());
        String fechaInicio=mmodelo.getFechainicio()!=null?mmodelo.getFechainicio().toString():null;
        
        if(fechaInicio==null || fechaInicio.trim().isEmpty() || fechaInicio.equals("0")){
            numDias=mmodelo.getNumdias();
        }else{
            fechaDB.setTime((Date) mmodelo.getFechainicio().clone());
        }
        fechaDigitada.setTime(fecha);
        if(numDias!=-1){
            int anno=numDias/360;
            int mes=(numDias%360)/30;
            int dias=(numDias%360);
            if(dias>30){
                dias=dias-(mes*30);
            }
            fechaDigitada.set(ANNO,fechaDigitada.get(ANNO)-anno);
            fechaDigitada.set(MES,fechaDigitada.get(MES)-mes);
            fechaDigitada.set(DIA,fechaDigitada.get(DIA)-dias);
            System.out.println(fechaDigitada.get(ANNO)+"-"+fechaDigitada.get(MES)+"-"+fechaDigitada.get(DIA));//fecha:Thu Feb 09 00:00:00 COT 2006
             /*
             * Cambio Relizado por Cristhiam Reina
             * 10/06/2011
             */
            String anoRet   = fechaDigitada.get(ANNO) + "";
            String mesRet   = (((fechaDigitada.get(MES)+1) + "").length() < 2) ? "0" + (fechaDigitada.get(MES)+1)  : "" + (fechaDigitada.get(MES)+1);
            String diaRet   = ((fechaDigitada.get(DIA) + "").length() < 2) ? "0" + fechaDigitada.get(DIA)  : "" + fechaDigitada.get(DIA);

            String fechaRet = anoRet + "-" + mesRet + "-" + diaRet;
            return fechaRet;
            //return String.valueOf(fechaDigitada.get(ANNO)+"-"+fechaDigitada.get(MES)+"-"+fechaDigitada.get(DIA));
        }else{
             /*
             * Cambio Relizado por JChuquen
             * 17/06/2011
             */
            String anoRet   = fechaDB.get(ANNO) + "";
            String mesRet   = (((fechaDB.get(MES)+1) + "").length() < 2) ? "0" + (fechaDB.get(MES)+1)  : "" + (fechaDB.get(MES)+1);
            String diaRet   = ((fechaDB.get(DIA) + "").length() < 2) ? "0" + fechaDB.get(DIA)  : "" + fechaDB.get(DIA);

            String fechaRet = anoRet + "-" + mesRet + "-" + diaRet;
            return fechaRet;
            //return String.valueOf(fechaDB.get(ANNO)+"-"+(fechaDB.get(MES)+1)+"-"+fechaDB.get(DIA));
        }
    }
    
    public static String setParametros(Flujos FLUJO_ACTUAL,String formular){
        Long dia=Long.valueOf("86400000");//dias en milisegundos
        formular=formular.toUpperCase().replaceAll("DIAS"," "+dia.toString()+" ");
        formular=formular.toUpperCase().replaceAll("FECHA"," "+String.valueOf(java.sql.Date.valueOf(FLUJO_ACTUAL.getFECHA()).getTime())+" ");
        formular=formular.toUpperCase().replaceAll("CAPITAL"," "+String.valueOf(FLUJO_ACTUAL.getCAPITAL())+" ");
        formular=formular.toUpperCase().replaceAll("INTERES_FIJO"," "+String.valueOf(FLUJO_ACTUAL.getINTERESFIJO())+" ");
        formular=formular.toUpperCase().replaceAll("INTERES_VARIABLE"," "+String.valueOf(FLUJO_ACTUAL.getINTERESVARIABLE())+" ");
        formular=formular.toUpperCase().replaceAll("CONOCIDO"," "+String.valueOf(FLUJO_ACTUAL.getCONOCIDO())+" ");
        formular=formular.toUpperCase().replaceAll("IDCONTRATO"," "+String.valueOf(FLUJO_ACTUAL.getIDCONTRATO())+" ");
        return formular;
    }
    
    public static Collection reloadTablasGuardar(){
        Collection tablasGuardar= new ArrayList<String>();
        tablasGuardar.add("ACCIONES");
        tablasGuardar.add("ADICONTRATOSRENTABILIDAD");
        tablasGuardar.add("BALANCE");
        tablasGuardar.add("BANDASLIQUIDEZ");
        tablasGuardar.add("BANDASVAR");
        tablasGuardar.add("CALCULOSRENTABILIDADCONTRATOS");
        tablasGuardar.add("CAMBIOESPERADOMONEDAS");
        tablasGuardar.add("CONTRATOS");
        tablasGuardar.add("CONTRATOSSIMPLES");
        tablasGuardar.add("CUENTAS");
        tablasGuardar.add("EMISORES");
        tablasGuardar.add("EMPRESAS");
        tablasGuardar.add("ESPECIES");
        tablasGuardar.add("FLUJOS");
        tablasGuardar.add("FLUJOSLIQUIDEZ");
        tablasGuardar.add("LIBROS");
        tablasGuardar.add("MONEDAS");
        tablasGuardar.add("POSICIONESACCIONES");
        tablasGuardar.add("POSICIONESESPECIES");
        tablasGuardar.add("PRODUCTOS");
        tablasGuardar.add("RELACIONACCIONESSUBCUENTAS");
        tablasGuardar.add("RELACIONBALANCESUBCUENTA");
        tablasGuardar.add("RELACIONESPECIESSUBCUENTAS");
        tablasGuardar.add("RELACIONMONEDASSUBCUENTAS");
        tablasGuardar.add("RELACIONSUBCUENTASPRODUCTOS");
        tablasGuardar.add("TASAS");
        tablasGuardar.add("TASASDEPAGOS");
        tablasGuardar.add("UNIDADESNEGOCIOS");
        tablasGuardar.add("VALORESCONTRATOS");
        tablasGuardar.add("VALORESMONEDAS");
        tablasGuardar.add("VALORESTASAS");
        tablasGuardar.add("VARCONTRATOSPRECIO");
        tablasGuardar.add("VARCONTRATOSTASA");
        tablasGuardar.add("DETALLEESCENARIO");
        return tablasGuardar;
    }
    
    public static Collection<Flujos> proyectarFlujo(Tasasdepagos tasasdepagos,Contratos contrato,Double valorTasa,Timestamp fechaCorte) throws Exception{
        if(valorTasa==null)
            throw new Exception("POR FECHA: La tasa de pago llego con valor nullo:");
        
        Collection<Flujos> CFlujos=new ArrayList<Flujos>();
        // se instancia la clase que implementa los metodos par el calculo de los planes de amotizacion
        PlanesAmortizacion plan= new PlanesAmortizacion(true);
        plan.setCalendario(ICalendarios.CALENDARIO_COMERCIAL);
        
        //se busca la frecuencia relacionada con la modalidad de la tasa de pago
        Integer FRECUENCIA=getFrecuencia(tasasdepagos.getMODALIDADPAGO());
        if(FRECUENCIA==null)
            throw new Exception("POR FECHA: La freciancia o modalidad no existe:"+tasasdepagos.getMODALIDADPAGO());

        Integer diasPeriodo = 0;

        if(FRECUENCIA>0){
            diasPeriodo = FRECUENCIA*30;
        }
        else{
            java.sql.Date fecini = java.sql.Date.valueOf(tasasdepagos.getFECHAINICIO().substring(0, 10).trim());
            java.sql.Date fecfin = java.sql.Date.valueOf(tasasdepagos.getFECHAFIN().substring(0, 10).trim());
            diasPeriodo = plan.getPeriodo360Dias(fecini.getTime(),fecfin.getTime());
        }
//
        valorTasa=Conversiones.efectivoAnualAPeriododVencido(valorTasa,0,diasPeriodo);

        System.out.println("valorTasa:" + valorTasa);
        if((valorTasa.doubleValue()<0 || valorTasa.doubleValue()>1) && !tasasdepagos.getMODALIDADPAGO().substring(0,1).equals("P"))
            throw new Exception("POR FECHA: El valor de la Tasa periodica no puede ser ni menor que 0, ni mayor que 1:"+valorTasa);
        
        java.sql.Date FECHA_INICIAL= new java.sql.Date(fechaCorte.getTime());
        java.sql.Date FECHA_FINAL= java.sql.Date.valueOf(tasasdepagos.getFECHAFIN().substring(0,10).trim());
        
        Double monto=contrato.getValorNominal();
        Integer plazo=null;


        //Calculo el plazo, para calendarion comercial en dias
        Integer pazoDias=plan.getPeriodo360Dias(FECHA_INICIAL.getTime(),FECHA_FINAL.getTime());
        
        if(contrato.getCuota_or_fecha().equals(2) && pazoDias.intValue()>0){//calculo por fecha
            contrato.setValorActual(null);
            //Calculo el plazo, para calendarion comercial en frecuencias
            if(FRECUENCIA>0){
                plazo=plan.getPeriodo360Periodos(FECHA_INICIAL.getTime(),FECHA_FINAL.getTime(),FRECUENCIA);
            
            //recalculo el monto
            if(pazoDias%(FRECUENCIA*30)>0){
                System.out.println("hay que calcular la fecha");
                java.sql.Date newFecha=plan.calcularFechaAnterior(plazo,FRECUENCIA,FECHA_FINAL.getTime());
                //Marcela Sep 20 2010
                plan.setFechaPagoInicial(plan.addMes(FRECUENCIA,newFecha.getTime()));
                Integer newPazoDias=plan.getPeriodo360Dias(newFecha.getTime(),FECHA_INICIAL.getTime());
                System.out.println("dias entre la nueva fecha y la fecha inicial:"+newPazoDias);
                 // Marcela Sep 20 de 2010

                // Double c=(360D/newPazoDias);
                // Double b=(1+valorTasa);
                // Double a=Math.pow(b,c);
                // monto=monto/a;

            }
          }else {
             plazo=1;
             java.sql.Date newFecha=java.sql.Date.valueOf(tasasdepagos.getFECHAINICIO().substring(0,10).trim());
             plan.setFechaPagoInicial(FECHA_FINAL);
             Integer newPazoDias=plan.getPeriodo360Dias(newFecha.getTime(),FECHA_INICIAL.getTime());
             System.out.println("dias entre la nueva fecha y la fecha inicial:"+newPazoDias);

          }
        }else if(contrato.getCuota_or_fecha().equals(1)){//calculo por cuotas
            if(FECHA_FINAL.getTime()<FECHA_INICIAL.getTime())
                throw new Exception("POR CUOTAS:La fecha final NO puede ser menor que la fecha inicial");
            
            if(pazoDias.intValue()<0){
                plan.setFechaPagoInicial(plan.addMes(1,fechaCorte.getTime()));
            }else if(pazoDias%(FRECUENCIA*30)>0){
                System.out.println("hay que calcular la fecha");
                java.sql.Date newFecha=plan.calcularFechaAnterior(FECHA_INICIAL.getTime(),FRECUENCIA,FECHA_FINAL.getTime());
                Integer newPazoDias=plan.getPeriodo360Dias(newFecha.getTime(),FECHA_INICIAL.getTime());
                System.out.println("dias entre la nueva fecha y la fecha inicial:"+newPazoDias);
                plan.setFechaPagoInicial(plan.addMes(1,newFecha.getTime()));
                Double c=(360D/newPazoDias);
                Double b=(1+valorTasa);
                Double a=Math.pow(b,c);
                monto=monto/a;
            }
            if((valorTasa*monto)>contrato.getValorActual())
                throw new Exception("POR CUOTAS: El valor del interes causado es mayor que el valor de la cuota");
            if(contrato.getValorActual()<0)
                throw new Exception("POR CUOTAS: El valor de lacuota no puede ser 0.0");
            
            //calculo del plazo
            Double resultado=Math.log(contrato.getValorActual())-Math.log(contrato.getValorActual()-(monto*valorTasa));
            resultado=resultado/(Math.log(1+valorTasa));
            if(resultado%resultado.intValue()>0)
                plazo=resultado.intValue()+1;
            else
                plazo=resultado.intValue();
        }
        if(plazo!=null){
            if(contrato.getSALDOCONTABLE()<0)
                throw new Exception("El valor del saldo contable NO puede ser 0.0");
            //se calcula el plan de amortizacion
             Object[][] obj= plan.calcularPlanCuotaFijaTasaFija(
                    monto,                                          //SALDOCONTABLE
                    valorTasa.doubleValue(),                        //ok
                    plazo,                                          //fecha fin menos la fecha de corte
                    IModalidad.VENCIDA,                             //esta
                    getFrecuencia(tasasdepagos.getMODALIDADPAGO()), //modalidad de pago
                    getFrecuencia(tasasdepagos.getMODALIDADPAGO()), //modalidad de pago
                    getFrecuencia(tasasdepagos.getMODALIDADPAGO()), //modalidad de pago
                    contrato.getValorActual());                      //por si el contrato trae el valor de la cuota
            
            //se recorre la matriz que retorna el plan de amortizacion
            for  (int i = 0; i < plazo; i++) {
                java.sql.Date fechaFlujo=java.sql.Date.valueOf(obj[i][1].toString().replaceAll("/","-"));
                Double interes=Double.valueOf(obj[i][3].toString().trim());
                Double capital=Double.valueOf(obj[i][4].toString().trim());
                CFlujos.add(new Flujos(contrato.getID(),fechaFlujo.toString(),capital,interes,0.0,1,0, contrato.getIDORIGENDATO()));
            }
        }
        return CFlujos;
    }
    private static Collection getData(String QUERY,Connection c) throws Exception{
        Collection mList =new ArrayList();
        if(QUERY!=null && !QUERY.trim().equals("")){
            PreparedStatement prep = null;
            ResultSet rs = null;
            try {
                int numCols = -1;
                Object registro[]=null;
                
                prep = c.prepareStatement(QUERY);
                rs = prep.executeQuery();
                numCols = rs.getMetaData().getColumnCount();
                for(; rs.next(); mList.add(((Object) (registro)))){
                    registro = new Object[numCols];
                    for(int i = 0; i < numCols; i++){
                        registro[i] = rs.getObject(i + 1);
                    }
                }
            }catch(Exception e){
                throw e;
            }finally{
                try {prep.close();} catch (Exception e) {}
                try {rs.close();} catch (Exception e) {}
            }
        }
        return mList;
    }
    public static Collection cargarDatosAtuales(int mId,Connection c)throws Exception {
        String QUERY=null;
        
        switch (mId) {
            case 1:
                QUERY="SELECT NOMBRE,FECHA,VALOR FROM VALORESMONEDAS VM inner join  MONEDAS MO  ON MO.ID=VM.IDMONEDA";
                break;
            case 2:
                break;
            case 3:
                break;
            case 4:
                break;
            case 5:
                QUERY="SELECT LI.NOMBRE,CU.NOMBRE,PR.NOMBRE,PR.ACTIVO,MO.NOMBRE FROM LIBROS LI  " +
                        "INNER JOIN CUENTAS CU ON LI.ID=CU.IDLIBRO " +
                        "INNER JOIN PRODUCTOS PR ON PR.IDCUENTA=CU.ID " +
                        "INNER JOIN MONEDAS MO ON PR.IDMONEDA=MO.ID";
                break;
            case 6:
                break;
            case 7:
                QUERY="SELECT AC.NOMBRE,AC.BURSATIL,MO.NOMBRE,EM.NOMBRE FROM ACCIONES AC " +
                        "INNER JOIN MONEDAS MO ON AC.IDMONEDA=MO.ID " +
                        "INNER JOIN EMISORES EM ON AC.IDEMISOR=EM.ID";
                break;
            case 8:
                break;
            case 9:
                break;
            case 10:
                //Este tiene problemas
                break;
            case 11:
                //Este tiene problemas
                break;
            case 12:
                QUERY="SELECT ES.ISIN,ES.NOMBRE,MO.NOMBRE,EM.NOMBRE,CAST(ES.VALOREMISION AS Int(4)) AS VALOREMISION, ES.DIASXANO, ES.DIASXMES, EM.ID FROM ESPECIES ES " +
                        "INNER JOIN MONEDAS MO ON ES.IDMONEDA=MO.ID " +
                        "INNER JOIN EMISORES EM ON ES.IDEMISOR=EM.ID";
                break;
            case 13:
                QUERY="";
                break;
            case 14:
                QUERY="";
                break;
            case 15:
                QUERY="";
                break;
            case 16:
                QUERY="";
                break;
            case 17:
                QUERY="";
                break;
            case 18:
                QUERY="SELECT CS.NOMBRE, CS.TIPO, CS.ID, PT.NOMBRE, UN.NOMBRE, EM.NOMBRE, CT.SALDOCONTABLE, CT.FECHAINICIAL, CT.SALDOMORA " +
                        ",CT.ALTURAMORA, CT.FECHA_VENCIMI,CT.FORMA_CALCULO,CT.VALORC_ACTUAL,CT.VALOR_NOMINAL,CT.PROYECTAR, CS.TASA_DESCUENTO " +
                        "FROM CONTRATOSSIMPLES CS " +
                        "INNER JOIN CONTRATOS CT ON CS.ID=CT.ID " +
                        "INNER JOIN PRODUCTOS PT ON PT.ID=CT.IDPRODUCTO " +
                        "INNER JOIN UNIDADESNEGOCIOS UN ON UN.ID=CT.IDUNIDADNEGOCIO " +
                        "INNER JOIN EMISORES EM ON CS.IDEMISOR=EM.ID " +
                        "WHERE CT.TIPO='ContratosSimples'";
                break;
            case 19:
                QUERY="";
                break;
            case 20:
                QUERY="";
                break;
            case 21:
                QUERY="";
                break;
            case 22:
                QUERY="";
                break;
            case 23:
                QUERY="";
                break;
            case 24:
                QUERY="";
                break;
            case 25:
                QUERY="";
                break;
            case 26:
                QUERY="";
                break;
            case 27:
                QUERY="";
                break;
        }
        return getData(QUERY,c);
    }
    
    public static void main(String[] arg){
        System.out.println( java.sql.Date.valueOf("2011-05-01") );
    }
}






//        switch (mId) {
//            case 1:
//                QUERY="SELECT NOMBRE,FECHA,VALOR FROM VALORESMONEDAS VM inner join  MONEDAS MO  ON MO.ID=VM.IDMONEDA";
//                break;
//            case 2:
////                    QUERY="SELECT NOMBRE,TIPO,MODALIDADTASA,NOMINALMODALIDADTASA FROM TASAS";
//                break;
//            case 3:
////                    QUERY="SELECT NOMBRE,FECHA,POSICION,VALOR FROM TASAS TA inner join VALORESTASAS VT ON TA.ID=VT.IDTASA";
//                break;
//            case 4:
////                    QUERY="SELECT EM.NOMBRE,UN.NOMBRE FROM EMPRESAS EM inner join UNIDADESNEGOCIOS UN ON em.ID=un.IDEMPRESA";
//                break;
//            case 5:
//                QUERY="SELECT LI.NOMBRE,CU.NOMBRE,PR.NOMBRE,PR.ACTIVO,MO.NOMBRE FROM LIBROS LI  " +
//                        "INNER JOIN CUENTAS CU ON LI.ID=CU.IDLIBRO " +
//                        "INNER JOIN PRODUCTOS PR ON PR.IDCUENTA=CU.ID " +
//                        "INNER JOIN MONEDAS MO ON PR.IDMONEDA=MO.ID";
//                break;
//            case 6:
////                    QUERY="SELECT NOMBRE,NIT FROM  EMISORES";
//                break;
//            case 7:
//                QUERY="SELECT AC.NOMBRE,AC.BURSATIL,MO.NOMBRE,EM.NOMBRE FROM ACCIONES AC " +
//                        "INNER JOIN MONEDAS MO ON AC.IDMONEDA=MO.ID " +
//                        "INNER JOIN EMISORES EM ON AC.IDEMISOR=EM.ID";
//                break;
//            case 8:
////                    QUERY="SELECT CO.ID,PA.UNIDADES,'nom1' as NOM1,AC.NOMBRE,PR.NOMBRE,UN.NOMBRE,CO.SALDOCONTABLE," +
////                            "CO.FECHAINICIAL FROM CONTRATOS CO " +
////                            "INNER JOIN POSICIONESACCIONES PA ON PA.ID=CO.ID " +
////                            "INNER JOIN ACCIONES AC ON AC.ID=PA.IDACCION " +
////                            "INNER JOIN PRODUCTOS PR ON PR.ID=CO.IDPRODUCTO " +
////                            "INNER JOIN UNIDADESNEGOCIOS UN ON UN.ID=CO.IDUNIDADNEGOCIO " +
////                            "WHERE CO.TIPO='Acciones' " +
////                            "AND FECHA_VENCIMI IS NULL " +
////                            "AND FORMA_CALCULO IS NULL " +
////                            "AND VALORC_ACTUAL IS NULL " +
////                            "AND VALOR_NOMINAL IS NULL " +
////                            "AND PROYECTAR IS NULL ";
//                break;
//            case 9:
////                    QUERY="SELECT IDCONTRATO,FECHA,VALOR FROM VALORESCONTRATOS";
//                break;
//            case 10:
//                //Este tiene problemas
////                    QUERY="SELECT IDCONTRATO,FECHA,CAPITAL,INTERESFIJO,INTERESVARIABLE,CONOCIDO,FORMULADO FROM FLUJOS ";
//                break;
//            case 11:
//                //Este tiene problemas
////                    QUERY="SELECT IDCONTRATO, FECHA, 'nom1' AS NOM1, CAPITAL,INTERESFIJO,INTERESVARIABLE,CONOCIDO FROM FLUJOS ";
//                break;
